package com.etime.shycourse.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.etime.shycourse.controller.wx.courselist.CourseSelectParam;
import com.etime.shycourse.dto.CourseAndCourseTypeDto;
import com.etime.shycourse.dto.CourseOfflineDto;
import com.etime.shycourse.dto.WXOffLineCourseShowDto;
import com.etime.shycourse.pojo.Course;
import com.etime.shycourse.wx.applets.dto.UserTeacherDto;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author wb
 * @since 2021-12-17
 */
@Repository
public interface CourseMapper extends BaseMapper<Course> {

    /**
     * 微信
     * 根据courseid 查询一条课程+课程类型数据(详细)
     */
    CourseAndCourseTypeDto selectCourseAndCourseTypeById(Integer courseid);

    /**
     * 微信
     * 根据课程信息 里面的教师id 查询出教师信息
     *
     * @param courseteacherid Course表中 courseteacherid
     * @return UserTeacherDto
     */
    UserTeacherDto selectUserTeacherDtoById(Integer courseteacherid);

    /**
     * 后台
     * 查询出所有可用的的课程       * 临时后台管理用创建订单
     *
     * @return List<Course>
     */
    List<Course> selectCourseList();

    /**
     * 重写 2022-03-08 09:35:51
     *
     * @param course 必要条件 ：课程教师id courseteacherid
     *               非必要条件：
     *               模糊查询 课程名 coursetitle
     *               课程类型查询  course
     *               <p>
     *               添加条件:
     *               课程状态 coursestate 三个查询条件；
     *               增加按（课程排序，课程评分，课程点击次数，评论次数）进行（asc/desc）排序的功能
     *               自定义 数据库中没有
     *               sort:排序 ,0=asc 1=desc
     *               SortBy:用什么排序 ,0=课程评分 coursescore ，1=课程点击次数 coursepullcount，2=评论次数 coursecommentcount。
     */
    Page<Course> selectCoursePageBys(Course course, Page<Course> page);

    /**
     * 根据课程id 修改课程评分
     *
     * @param coursescore
     * @param courseId
     * @return int
     */
    Integer updateByIds(BigDecimal coursescore, Integer courseId);

    /**
     * 微信小程序查询课程列表-带分页
     *
     * @param param
     * @param page
     * @return Page<Course>
     */
    Page<Course> selectCourseByPageWX(CourseSelectParam param, Page<Course> page);

    /**
     * 微信小程序查询线下课程列表-带分页
     *
     * @param param
     * @param page
     * @return
     */
    Page<WXOffLineCourseShowDto> selectOffLineCourseByPageWX(CourseSelectParam param, Page<Course> page);

    /**
     * 小程序首页-查询线下课程列表
     *
     * @param num 最多查询多少行数据
     * @return
     */
    List<WXOffLineCourseShowDto> selectOffLineCourseByIndex(Integer num);

    /**
     * 小程序-课程详情页面（根据课程id查询课程详细信息）
     *
     * @param courseid
     * @return
     */
    WXOffLineCourseShowDto selectCourseShowById(Integer courseid);

    /**
     * 根据 课程id(courseid) 查询线下课程数据
     *
     * @param courseId
     * @return CourseOfflineDto
     */
    CourseOfflineDto selectOfflineCourseById(Integer courseId);
}